Шаг 128 - Метод Update.

Описание
Сохраняет содержимое буфера копирования в обновляемом объекте Recordset.

наборЗаписей.Update (тип, режим )

Параметры
наборЗаписей
Объектная переменная, представляющая открытый обновляемый объект Recordset.
тип
Необязательный. Константа, задающая тип обновления (только в рабочей области ODBCDirect).

dbUpdateRegular			По умолчанию.  Предстоящие изменения не помещаются в буфер и записываются 
				на диск немедленно.
dbUpdateBatch			Запись на диск всех предстоящих изменений из буфера обновления.
dbUpdateCurrentRecord		Запись на диск только предстоящих изменений текущей записи.

режим
Необязательный. Значение типа Boolean, указывающее, следует ли принудительно обновлять базу данных, вне зависимости от изменения другим пользователем данных в базовых источниках после вызова методов AddNew, Delete или Edit>. При значении True изменения заносятся, и все изменения, внесенные другим пользователем, переписываются. При значении False (по умолчанию) изменения, внесенные другим пользователем за время ожидания обновления, приведут к невозможности занесения изменений, конфликтующих с уже внесенными изменениями. Ошибка при этом не возникает, а в свойствах BatchCollisionCount и BatchCollisions будут записаны число конфликтующих записей и сами записи, соответственно (только в рабочей области ODBCDirect).

Замечания
Метод Update применяется для сохранения текущей записи и всех внесенных в нее изменений.
Внесенные в текущую запись изменения теряются в следующих случаях:
1. Вызван метод Edit или AddNew, а затем осуществлен переход к другой записи без вызова метода Update.
2. Вызван метод Edit или AddNew, после чего метод Edit или AddNew вызывается снова без вызова метода Update.
3. В значении свойства Bookmark указывается другая запись.
4. Набор записей, указанный в аргументе наборЗаписей, закрывается без вызова метода Update.
5. Пользователь отменяет сеанс редактирования, заданный в методе Edit, вызвав метод CancelUpdate.
Для внесения изменений в запись следует сначала скопировать содержимое текущей записи в буфер копирования с помощью метода Edit. Если метод Edit не будет вызван первым, то попытка изменить значение поля или вызвать метод Update приведет к ошибке.
В рабочей области ODBCDirect можно выполнить пакетные обновления, если библиотека указателей набора записей поддерживает пакетные обновления, а объект Recordset был открыт с параметром пакетного обновления с нежесткой блокировкой.
В рабочей области ядра Microsoft Jet, когда в многопользовательской среде свойство LockEdits объекта Recordset имеет значение True(жесткая блокировка), запись остается заблокированной с момента вызова метода Edit до отмены изменения или до обновления записи с помощью метода Update. Если свойство LockEdits имеет значение False(нежесткая блокировка), запись блокируется и сравнивается с исходной версией записи только непосредственно перед ее обновлением в базе данных. Если запись была изменена после вызова метода Edit, выполнить операцию Update невозможно. При подключении ядра Microsoft Jet к базе данных ODBC или базе данных ISAM всегда используется нежесткая блокировка. Для продолжения операции обновления следует снова вызвать метод Update. Для возвращения к записи, измененной другим пользователем, следует выполнить инструкцию Move 0.
Для добавления, изменения или удаления записи необходимо, чтобы запись имела уникальный индекс в базовом источнике данных. В противном случае возникает ошибка «Отсутствие разрешения» при вызове метода AddNew, Delete или Edit в рабочей области Microsoft Jet или ошибка «Недопустимый аргумент» при вызове метода Update в рабочей области ODBCDirect.

Пример
Следующая программа демонстрирует совместное применение методов Update и Edit.

Sub UpdateX()

	Dim dbsNorthwind As Database
	Dim rstEmployees As Recordset
	Dim strOldFirst As String
	Dim strOldLast As String
	Dim strMessage As String

	Set dbsNorthwind = OpenDatabase("Борей.mdb")
	Set rstEmployees = dbsNorthwind.OpenRecordset("Сотрудники")

	With rstEmployees
		.Edit
		' Сохраняет исходные данные.
		strOldFirst = !Имя
		strOldLast = !Фамилия
		' Изменяет данные в буфере редактирования.
		!Имя = "Вова"
		!Фамилия = "Сидоров"

		' Отображает содержимое буфера и принимает введенные данные.
		strMessage = "Режим редактирования:" & vbCr & 	"    Исходные данные = " & strOldFirst & " " & _
		strOldLast & vbCr & "    Данные в буфере = " &  	!Имя & " " & !Фамилия & vbCr & vbCr & _
		"Вызвать Update для замены в объекте Recordset " & 	"исходных данных на данные из буфера?"

		If MsgBox(strMessage, vbYesNo) = vbYes Then
			.Update
		Else
			.CancelUpdate

		End If
	
		' Отображает результаты.
		MsgBox "Содержимое набора записей = " & !Имя & " " & 	!Фамилия

		' Восстанавливает исходные данные, так как изменения 
		' внесены только для демонстрации.
		If Not (strOldFirst = !Имя And 	strOldLast = !Фамилия) Then
			.Edit
			!Имя = strOldFirst
			!Фамилия = strOldLast
			.Update
		End If
		.Close
	End With
	dbsNorthwind.Close
End Sub
Hosted by uCoz